<?php

/*  classe tabela - classe para tratamento das funções básicas de uma tabela */

class tabela {

    public $nometabela;
    public $campos;
    public $chaveprimaria;

    /* construtor da classe tabela - responsável por inicializar um objeto da classe tabela */

    function __construct($tab, $bd) {
        $listacampos = new consulta;
        if ($listacampos->executar("select * from " . $tab . " limit 0,1", $bd)) {
            $this->nometabela = $tab;
            for ($i = 0; $i < mysqli_field_count($bd); $i++) {
                $atributos = mysqli_fetch_field_direct($listacampos->resultado, $i);
                $this->campos[] = $atributos->name;
                $flags = $atributos->flags;
                if ($flags & 2)
                    $this->chaveprimaria[] = $atributos->name;
            }
        }
    }

    function inserir($dados, $bd) {
        $comando = "insert into " . $this->nometabela . "(";
        foreach ($this->campos as $campo) {
            if (array_key_exists($campo, $dados))
                if (!is_array($dados[$campo]))
                    $comando .= $campo . ",";
        }
        $comando = substr($comando, 0, -1) . ") values(";
        foreach ($this->campos as $campo) {
            if (array_key_exists($campo, $dados))
                if (!is_array($dados[$campo]))
                    $comando .= "'" . $dados[$campo] . "',";
        }
        $comando = substr($comando, 0, -1) . ")";
        $consulta = new consulta;
        $consulta->executar($comando, $bd);
        return $consulta->numlinhas > 0;
    }

    function get_sql($dados) {
        $comando = "insert into " . $this->nometabela . "(";
        foreach ($this->campos as $campo) {
            if (array_key_exists($campo, $dados))
                if (!is_array($dados[$campo]))
                    $comando .= $campo . ",";
        }
        $comando = substr($comando, 0, -1) . ") values(";
        foreach ($this->campos as $campo) {
            if (array_key_exists($campo, $dados))
                if (!is_array($dados[$campo]))
                    $comando .= "'" . $dados[$campo] . "',";
        }
        $comando = substr($comando, 0, -1) . ")";
        return $comando;
    }

    function alterar($dados, $bd) {
        $comando = "update " . $this->nometabela . " set ";
        foreach ($this->campos as $campo) {
            if (array_key_exists($campo, $dados))
                if (!is_array($dados[$campo]))
                    $comando .= $campo . "=" . "'" . $dados[$campo] . "',";
        }
        $comando = substr($comando, 0, -1) . " where ";

        foreach ($this->chaveprimaria as $chave) {
            if (array_key_exists($chave, $dados))
                if (!is_array($dados[$campo]))
                    $comando .= $chave . "=" . "'" . $dados[$chave] . "' and ";
        }

        $comando = substr($comando, 0, -4);
        $consulta = new consulta;
        $consulta->executar($comando, $bd);
        return $consulta->numlinhas > 0 || !mysqli_errno($bd);
    }

    function get_sql_update($dados) {
        $comando = "update " . $this->nometabela . " set ";
        foreach ($this->campos as $campo) {
            if (array_key_exists($campo, $dados))
                if (!is_array($dados[$campo]))
                    $comando .= $campo . "=" . "'" . $dados[$campo] . "',";
        }
        $comando = substr($comando, 0, -1) . " where ";

        foreach ($this->chaveprimaria as $chave) {
            if (array_key_exists($chave, $dados))
                if (!is_array($dados[$campo]))
                    $comando .= $chave . "=" . "'" . $dados[$chave] . "' and ";
        }

        $comando = substr($comando, 0, -4);
        return $comando;
    }

    function apagar($filtro, $bd) {
        $comando = "delete from " . $this->nometabela . " where ";
        $comando.= $filtro;
        $consulta = new consulta;
        $consulta->executar($comando, $bd);
        return $consulta->numlinhas > 0;
    }

    function imprimirdados() {
        echo ($this->nometabela . "<br>");
        foreach ($this->campos as $campo)
            echo $campo . "<br>";
        foreach ($this->chaveprimaria as $chave)
            echo $chave . "<br>";
    }

    function dbcombo($campo_listagem, $campo_valor, $bd, $filtro = "", $identificador = "", $estilo = "", $evento = "", $valor_inicial = "", $disabled_readonly = "") {
        if (in_array($campo_listagem, $this->campos) && in_array($campo_valor, $this->campos)) {
            $comando = "select " . implode(",", array($campo_listagem, $campo_valor)) . " from $this->nometabela ";
            if ($filtro != "")
                $comando .= "where $filtro ";
            $comando .= "order by $campo_listagem";
            $listagem = new consulta;
            $listagem->executar($comando, $bd);
            if (!$listagem)
                $resultado .= "Consulta de listagem do campo inválida.";
            if ($listagem->numlinhas > 0) {
                if ($disabled_readonly == "disabled")
                    $disabled_readonly = "disabled=\"$disabled_readonly\"";
                if ($disabled_readonly == "readonly")
                    $disabled_readonly = "readonly=\"$disabled_readonly\"";
                $resultado .= "<select name=\"$identificador\" id=\"$identificador\" $disabled_readonly ";
                if ($estilo != "")
                    $resultado .= "class=\"$estilo\" ";
                $resultado .= " $evento>";
                $listagem->primeiro();
                do {
                    if ($listagem->dados[$campo_valor] == $valor_inicial)
                        $resultado .= "<option value=\"" . $listagem->dados[$campo_valor] . "\" selected>" . $listagem->dados[$campo_listagem] . "</option>";
                    else
                        $resultado .= "<option value=\"" . $listagem->dados[$campo_valor] . "\">" . $listagem->dados[$campo_listagem] . "</option>";
                }
                while ($listagem->proximo());
                $resultado .= "</select>";
            }
            else {
                $resultado .= "<select name=\"$identificador\" id=\"$identificador\" disabled=\"disabled\" ";
                if ($estilo != "")
                    $resultado .= "class=\"$estilo\" ";
                $resultado .= " $evento></select>";
            }
        }
        else
            $resultado .= "Erro campos solicitados não encontrados.";
        return($resultado);
    }

}
?>